package com.xjggb.optional;

import java.util.Optional;

public class Demo01 {
    public static void main(String[] args) {


    }


    public void show3() {
        /**
         * Optional中的常用方法介绍
         *   get(): 如果Optional有值则返回，否则抛出NoSuchElementException异常
         *          get()通常和isPresent方法一块使用
         *   isPresent():判断是否包含值，包含值返回true，不包含值返回false
         *   orElse(T t):如果调用对象包含值，就返回该值，否则返回t
         *   orElseGet(Supplier s):如果调用对象包含值，就返回该值，否则返回 Lambda表达式的返回值
         */
        Optional<String> op1 = Optional.of("zhangsan");
        Optional<String> op2 = Optional.empty();

        // 获取Optional中的值
        if (op1.isPresent()) {
            String s1 = op1.get();
            System.out.println("用户名称:" + s1);
        }

        if (op2.isPresent()) {
            System.out.println(op2.get());
        } else {
            System.out.println("op2是一个空Optional对象");
        }

        String s3 = op1.orElse("李四");
        System.out.println(s3);
        String s4 = op2.orElse("王五");
        System.out.println(s4);

        String s5 = op2.orElseGet(() -> {
            return "Hello";
        });
        System.out.println(s5);
    }

    public static void show2() {
        // 第一种方式 通过of方法  of方法是不支持null的
        Optional<String> op1 = Optional.of("zhangsan");
        //Optional<Object> op2 = Optional.of(null);

        // 第二种方式通过 ofNullable方法 支持null
        Optional<String> op3 = Optional.ofNullable("lisi");
        Optional<Object> op4 = Optional.ofNullable(null);

        // 第三种方式 通过empty方法直接创建一个空的Optional对象
        Optional<Object> op5 = Optional.empty();
    }

    public static void show1() {
        //String userName = "张三";
        String userName = null;
        if (userName != null) {
            System.out.println("字符串的长度：" + userName.length());
        } else {
            System.out.println("字符串为空");
        }
    }
}
